/**
 * @author zhaoren
 * @version 1.0
 * @description 装饰器抽象类，本质还是为了更好地去装饰/扩展{@link Component}的功能
 * @date 2020/7/28 10:50
 **/
public abstract class Decorator extends Component{

    /**
     * 要装饰的component组件，当腰进行功能扩招时 ->方式有扩展子类，这里引入
     * 装饰者模式的意义就是比扩展子类更加灵活，在添加子类的同时我可以调换这些功能
     * 的固有逻辑顺序，以至于让功能更好的扩展，丰富其扩展功能的组合形态
     */
    protected Component component;

    /**
     * 设置组件，形成一个调用/装饰链，这个链之间的调用顺序可以按照逻辑需求进行改变
     * @param component
     */
    public void decorate(Component component) {
        this.component = component;
    }

    @Override
    public void operation() {
        if (component != null){
            component.operation();
        }
    }
}
